# 创建集合set,set()用来创建集合的函数，type()用来查看数据类型
# 1,可以使用大括号来进行创建
s = {1, 2, 3, 4}
# 2.使用set()函数来进行创建
ss = set('1234')
print(type(s))
print(type(ss))

# 集合的添加和删除
# 添加元素
s.add(6)
print(s)
# 删除集合中第一个元素
s.pop()
print(s)
# 删除集合中的元素
s.remove(4)
print(s)

# #创建元组
# 创建空元组
tuple1 = ()
print(tuple1)
# 创建带有元素的元组，可以有元素类型
tuple2 = (1, "a", 3, "hello", 2.2)
print(tuple2)
# 创建只有一个元素的元组
tuple3 = (1,)
print(type(tuple3))

# #使用tuple()函数将其他数据类型转换为元组类型。
# 语法格式：tuple（数据）
# 将字符串转换成元组
tuple1 = tuple('hello,world')
print(tuple1)
# 将列表转换成元组
list1 = ['Python', 'Java', 'C++', 'C']
tuple2 = tuple(list1)
print(tuple2)

# 从开始索引开始截取，截至到结束索引之前。
tuple = ('h', 'e', 'l', 'l', 'o')
# #使用索引访问元组中的某个元素
# 使用正数索引，从0开始
print(tuple[2])
# 使用负数索引，倒序从-1开始
print(tuple1[-4])

# #使用切片访问元组中的一组元素，前闭后开
# 使用正数切片
print(tuple[1:4])
# 指定步长
print(tuple1[1:4:2])
# 使用负数切片
print(tuple1[-5:-1])

level = int(input("请输入行数："))
# 方式一：
for current_level in range(1, level + 1):
    # 控制空格个数
    for i in range(level - current_level):
        print(' ', end='')
    # 控制*个数
    for j in range(2 * current_level - 1):
        print('*', end='')
    print()

# # 修改元组元素
# tuple1 = (12, 34, 56)
# tuple2 = ('abc', 'mn')
# # 修改元组元素操作是非法的
# # tuple1[0]=100
# # tuple1[0]=200
# # 连接元组创建一个新的元组，两个数据必须都是元组
# tuple3 = tuple1 + tuple2
# print(tuple3)
#
# tuple1 = (1, 2, 3, 4, [6,3,4])
# print(tuple1)
# del tuple1
# print(tuple1)

##任务一
# 使用input 方法输入联系人姓名,电话，邮件，地址；
# 定义元组tuple1储存上述信息；
# 输出tuple1，查看联系人信息；
#
name = input("请输入添加的联系人姓名：")
telephone = input("请输入13位电话号码：")
email = input("请输入邮件:")
address = input("请输入地址")
tuple1 = ("姓名：", name, "电话：", telephone, "邮箱：", email, "地址：", address)
print(tuple1)

"""列表list"""
# 列表的创建
# 1.使用[]直接创建列表：
list1 = [1, "hello", 2, "C语言"]
print(list1)
print(type(list1))
# 创建一个空列表
list2 = []
print(list2)
# 2.使用list()函数将其他类型数据(字符串，元组，range函数)转化为列表：
# 将字符串转换成列表
# list=list(“hello”)
# print(list1)
# 创建空列表
# print(list())
# 1,转化成字符串
l3 = list("hello")
print(l3)
# 2.转化元组
t1 = tuple("hello")
l4 = list(t1)
print(14)

# 3.转化range函数
r1 = range(5)  # 0.1.2.3.4
print(r1)
l5 = list(r1)
print(l5)

#访问列表中的元素
l1=[1,2,3,'8','p','u']
# 使用正数索引进行访问，访问p
print(l1[4])
#使用负向索引进行访问p
print(l1[-2])

#
##使用切片访问元素的格式；代码如下：
list=['p','y','t','h','o','n']
#使用正数切片，截取索引为2，3,4,的元素，默认步长为1
print(list1[2:5])
print(list1[:3])#截取索引为0-2的元素，默认步长为1
#截取索引为3-5的元素，结束索引默认为最后一个元素
print(list[3:])
#使用正数切片，截取索引为1-5的元素，步长为2
print(list1[1:6:2])
print(list1[-3:-1])#使用负数切片
#步长如果是负数，即从右向左提取元素
print(list1[::-1])
#使用切片形式访问列表中的元素
l2=['p','u','w','r',1,5,7]

#正向取值
#使用正切片取出索引2,3,4的元素
print(l2[2:5])
#正切片取前三个元素
print(l2[:3])
#正切片取后三个元素
print(l2[4:])
#使用正切片，取索引1-5的元素，步长为2
print(l2[1:6:2])
#负向取值
#使用负切片形式取出u,w,r
print(l2[::-1])
l3=[10,8,6,5,2,1]
print(l3[::-1])

##遍历循环
list1=['Python','Java','C']
#使用for循环遍历列表
for item in list1:
    print(item)
    l3=['Python','2','3','5']
    for i in l3:
        print(i)

#修改列表元素
#修改单个元素
l4=[10,56,34,2,56,45,89]
#将索引为2的元素值修改为100
l4[2]=100
print(l4)

#修改多个元素
l5=[10,56,34,2,56,44,7]
#修改第1~4个元素的值(不包括第四个元素）
l5[1:4]=[45,-56,98]
print(l5)

#列表中添加元素
#1.append()用于在列表的末尾追加元素
l6=['a','b','c']
l6.append('f')
print(l6)
##列表添加列表
l6.append(['e','f'])
print(l6)


#2.extend()在列表的末尾一次添加多个元素
l7=['a','b','c']
l7.extend('d')
print(l7)
#列表添加列表
l7.extend(['e','f','g','h'])
print(l7)
l7.extend('world')
print(l7)


#3,insert()在列表的特定位置添加想要添加的特定元素
l8=['Python','C','Java']
##插入元素，在索引为1出插入C++
l8.insert(2,'go')
#l8.insert(1,'C++')
print(l8)

 # # 删除元素
# l15 = ['a', 'b', 'c', 'd']
#
# l15.remove('a')
# print(l15)
# # 如果元素不在列表中，删除元素时会报错
# l15.remove('f')

# pop()方法用来删除列表中指定索引处的元素
l16 = [10, 56, 34, 2, 56, 44, 7]
# 删除索引为3的元素
l16.pop(3)
print(l16)
# 删除最后一个元素
l16.pop()
print(l16)

# del 可以用来删除列表中单个元素或者一段连续的元素。
l17 = ['a', 'b', 'c', 'd', 'e']
# 删除索引为1的元素
del l17[1]
print(l17)
l18 = [10, 56, 34, 2, 58, 44, 7]
# 删除索引为1-3的元素
del l18[1:4]
print(l18)

# 若将列表中所有元素全部删除，可使用列表的clear()方法
l19 = ['a', 'b', 'c', 'a']
# 清空列表
l19.clear()
print(l19)

#任务
#创建两个空列表 name-list 和phone-list,用于储存联系人姓名和电话；
#向列表中添加联系人信息；
#输入联系人编号修改信息；
#输入联系人编号删除信息；
##使用clear()清空通讯录。
name_list=[]
phone_list=[]
while 1:
    print("菜单：1.添加联系人2.修改联系人 3.删除联系人")
    chioce=input("请输入选择：")
    #1.添加联系人，包括姓名，手机号
    if chioce=="1":
        name_list.append(input("请输入联系人姓名："))
        phone_list.append(input("请输入联系人手机号"))
        print(name_list)
        print(phone_list)
    #2.修改联系人信息
    elif chioce=='2':
        num=int(input("请输入联系人编号："))
        if len(name_list)>0 and num <= len(name_list):
            name_list[num-1]=input("修改联系人姓名")
        else:
            print("联系人编号输入有误")
        #3.删除联系人信息
    elif chioce =="3":
        num=int(input("请输入联系人编号："))
        if len(name_list)>0 and num<=len(name_list):
            name_list.pop(num-1)
            phone_list.pop(num-1)
        else:
           print("联系人编号输入有误")
    else:
       print("显示联系人信息")
       print(name-list)
       print(phone-list)
       # # 查找元素 index()列表名 index[要查找的元素，索引起始位置，索引结束位置]
# ls1 = [1, 3, 5, 7, 'a', 'b', 8, 3, 'b', 2, 10]
# print(ls1.index(3))
# print(ls1.index('b', 6))
# print(ls1.index('b', 6, 9))
# print(ls1.index(10))

# # count()方法用来统计某个元素在列表中出现的次数 列表名.count(统计的value元素)
# ls2 = [1, 3, 5, 7, 'a', 'b', 8, 3, 'b', 2, 5, 5, 7, 1]
# print(ls2.count(5))
# print(ls2.count(0))
# print(ls2.count('b'))

# 元素排序 sort()函数用于对原列表进行排序，如果指定参数，则使用指定的比较函数
# 语法格式为：ls.sort(key=None,reverse=False)
# 1,元素是字符串的排序
ls3 = [1, 3, 44, 23, 99, 88, 56, 233]
# 默认升序
ls3.sort()
print(ls3)
# 降序 reverse=True
ls3.sort(reverse=True)
print(ls3)

ls3 = [1, 2, 3, 5, 6, 4, ]
# 默认升序
ls3.sort()
print(ls3)
# 降序 reverse=True
ls3.sort(reverse=True)
print(ls3)

"""字典"""
# 字典的创建
# 1，使用{}创建字典语法格式：
# 字典名={'key1':'value1','key2':'value2',...,'keyn':valuen}
# 使用字符串作为key
d1 = {'python': 90, "可视化": 89, "英语": 85}
print(type(d1))
# 使用元组和数字作为key
d2 = {(23, 89): "great", 30: [1, 3, 4]}
print(type(d2))
# 创建元组
d3 = {}
print(d3)

# 2,用dict（）方法通过关键字的参数来创建字典格式：
# 字典名=dict（key1=value1,,key2=value2,key3=value3)
d4 = dict(数学=98, 语文=87, 英语=89)
print(d4)

# #字典元素的访问
# 1、字典名[key]
d5 = {'数学': 95, '英语': 92, '语文': 84}
# 键存在，返回的值是value
print(d5['英语'])
# 键不存在，会引发一个keyerror错误
print(d5['Python'])

# 2、get()方法来获取指定键对应的值，语法格式：字典名.get(key[.default])
d6 = {'数学': 95, '英语': 92, '语文': 84}
# 键存在
print(d6.get('语文'))
# 键存在，不写default，会返回none
print(d6.get('python'))
print(d6.get('python', '该键不存在'))

# 字典添加键值对
d7 = {'数学': 95, '英语': 92, '语文': 84, 'Python': 99}
d7['可视化'] = 99
print(d7)

# 字典修改键值对
d8 = {'数学': 95, '英语': 92, '语文': 84, 'Python': 99}
d8['英语'] = 100
print(d8)

##字典删除键值对
d9 = {'数学': 95, '英语': 92, '语文': 84, 'Python': 99}
# 1、使用del关键字
del d9['语文']
print(d9)
# 2、使用pop（）方法
d9.pop('英语')
print(d9)
